package entity

import "encoding/json"

type MsgTypeUdp byte

const (
	MsgOkUdp MsgTypeUdp = iota
	MsgErrUdp
	MsgOnline
	MsgAddr
	MsgShutDown
	MsgHeartbeat
)

type MessageUdp struct {
	MsgType    MsgTypeUdp        `json:"type"`
	OnlineAddr string            `json:"addr"`
	SyncMap    map[string]string `json:"map"`
}

func (this *MessageUdp) String() []byte {
	bytes, _ := json.Marshal(this)
	return bytes
}

func Decode(b []byte) (m *MessageUdp, err error) {
	err = json.Unmarshal(b, &m)
	return
}

func NewUpOnlineMsg() *MessageUdp {
	return &MessageUdp{
		MsgType: MsgOnline,
		// OnlineAddr: localAddr,
	}
}

func NewOkMsg() *MessageUdp {
	return &MessageUdp{
		MsgType: MsgOkUdp,
		// OnlineAddr: localAddr,
	}
}

func NewErrMsg() *MessageUdp {
	return &MessageUdp{
		MsgType: MsgErrUdp,
		// OnlineAddr: localAddr,
	}
}

func NewAddrMsg() *MessageUdp {
	return &MessageUdp{
		MsgType: MsgAddr,
	}
}

func NewShutDown() *MessageUdp {
	return &MessageUdp{
		MsgType: MsgShutDown,
	}
}
